	import * as THREE from '../../libs/three.weapp.js'
	import { OrbitControls } from '../../libs/OrbitControls.js'
	
	function all_init(canvas,self){
		//创建场景
		self.mScene = new THREE.Scene();
		self.mScene.background = new THREE.Color("#e6e6e6"); // 场景背景颜色
		
		// 创建摄像机
		self.mCamera = new THREE.PerspectiveCamera(19, self.mSceneWidth / self.mSceneHeight,0.1, 9,0.9);
		//self.mCamera = THREE.OrthographicCamera(1000, 1000, 800, 800, 1, 1000)
		//self.mCamera.position.set(0, 0, 17);
		self.mCamera.position.set(-12, 0, 1);
		
		//创建坐标轴辅助器
		const axes = new THREE.AxesHelper(5);
		self.mScene.add(axes);
		
		// 创建纹理贴图
		var textureLoader = new THREE.TextureLoader();
		textureLoader.load(self.panorama_url,(texture)=>{
			// 创建球体几何体
			  var geometry = new THREE.SphereGeometry(5, 132, 132);
			//var geometry = new THREE.SphereGeometry(1, 132, 132);
			
			//创建材质对象
			var material = new THREE.MeshBasicMaterial({
				envMap: texture,
				//side: THREE.DoubleSide
				//side: THREE.BackSide // 只渲染球体背面
			});
			
			// 创建网格对象并添加到场景中
			 var mesh = new THREE.Mesh(geometry, material);
			// // 设置模型位置
			 mesh.position.set( 0, 0, 0 );
			 self.mScene.add(mesh);
			 
			 texture.mapping = THREE.EquirectangularReflectionMapping;
			 
			self.mScene.background = texture;
			
			self.mScene.environment = texture;
			
			//创建底部圆形
			// 创建一个纹理加载器
			
			var textureLoader4 = new THREE.TextureLoader();
			textureLoader4.load(self.bottom_pic_url, function(texture4) {
			   // 创建白色材质
			   var defaultMaterial = new THREE.MeshBasicMaterial({
				   color: 0xffffff ,// 白色
				// side: THREE.BackSide // 设置材质为背面渲染
			   });
			   // 创建平面几何体
			   var geometry1 = new THREE.CylinderGeometry(0.5,0.5,0.1,120); // 设置地板大小为100x20x100	
				  // 创建一个材质，并将纹理应用于圆柱体顶面
				var topMaterial = new THREE.MeshBasicMaterial({ map: texture4 });
				// 创建一个数组来存储圆柱体的各个面的材质
				   var materials4 = [
					   defaultMaterial, // 右侧面
						topMaterial, // 左侧面
						topMaterial, // 侧面
						topMaterial, // 侧面
					   topMaterial, // 底面
					   topMaterial,     // 顶面
				   ];
				 // 创建一个多材质的网格
					var cylinder = new THREE.Mesh(geometry1, materials4);
				cylinder.position.set(0,-5,0);
				// 将Group对象添加到场景中
				self.mScene.add(cylinder);
			});
			
			//建个展示用的圆环(纯装饰)
			// 创建一个圆柱体
			var geometry5 = new THREE.CylinderGeometry(1,1,0.1,120);
			// 创建一个半透明材质
			var material5 = new THREE.MeshBasicMaterial({
				color: 0xffffff, // 设置颜色（白色）
				transparent: true, // 启用透明
				opacity: 0.6, // 设置透明度，取值范围为 0（完全透明）到 1（完全不透明）
			});
			// 创建一个网格并将材质应用上去
			var cylinder5 = new THREE.Mesh(geometry5, material5);
			cylinder5.position.set(0,-5.1,0);
			self.mScene.add(cylinder5);
		
		});		
		
		// 创建光线
		const light1 = new THREE.HemisphereLight(0xffffff, 0x444444); // 半球光（天空颜色，地面颜色，光照强度）
		light1.position.set(0, 0, 200);
		self.mScene.add(light1);
		const light2 = new THREE.DirectionalLight(0xffffff); // 平行光（颜色， 光照强度）
		light2.position.set(0, 0, 220);
		self.mScene.add(light2);
		
		// 创建渲染器
		const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
		renderer.setSize(self.mSceneWidth, self.mSceneHeight);
		
		// 创建控制器
		const controls = new OrbitControls(self.mCamera, renderer.domElement);
		controls.target.set(self.worldFocus.x, self.worldFocus.y, self.worldFocus.z);// 摄像机围绕旋转的中心
		controls.enablePan = false; // 禁止摄像机平移
		controls.enableDamping = true; // 设置阻尼，需要在 update 调用
		controls.dampingFactor = 0.07;		
		
		// 渲染（闭包）
		var render = () => {
			// 帧动画
			
			self.renderAnimFrameId = canvas.requestAnimationFrame(render);
		
			//光源跟随相机
			var vector = self.mCamera.position.clone();
			light1.position.set(vector.x,vector.y,vector.z);
		
			// 控制器
			if (controls.enabled) controls.update();
			// 渲染场景
			renderer.render(self.mScene, self.mCamera);
		};
		
		render();
	}

	function clear_canvas(self){
		// 清理渲染帧动画
		if(self&&self.renderAnimFrameId){
			THREE.global.canvas && THREE.global.canvas.cancelAnimationFrame(self.renderAnimFrameId);
			// 清理canvas对象
			THREE.global.unregisterCanvas(self.mCanvasId);
			console.log("Unload");
		}
	}


	// 触摸开始
	function  touchStart(e){
	    THREE.global.touchEventHandlerFactory('canvas', 'touchstart')(e)
	}
	// 触摸移动中
	function  touchMove(e){
	    THREE.global.touchEventHandlerFactory('canvas', 'touchmove')(e)
		
	}
	// 触摸结束
	function  touchEnd(e){
	    THREE.global.touchEventHandlerFactory('canvas', 'touchend')(e)
	}


export {
	all_init,
	clear_canvas,
	touchStart,
	touchMove,
	touchEnd
}